package com.ehome.poct.core.api.dto.patient;

import com.ehome.core.annotations.Ignore;
import com.ehome.core.entity.DTO;
import com.ehome.poct.core.api.common.ValueConst;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 终端 病人患者
 */
@Data
@Accessors(chain = true)
public class TermPatientDTO extends DTO {
    /**
     * 患者主键ID
     */
    private Long termPatientId;

    /**
     * 那个诊所收录
     */
    private Long termClinicId;

    /**
     * 来自那个设备
     */
    private String deviceSno;

    /**
     * 患者姓名
     */
    private String name;

    /**
     * 手机号码
     */
    private String phone;

    /**
     * 性别 0 未知 1男 2女
     */
    private Integer sex;

    /**
     * 年龄（岁）
     */
    private BigDecimal age;

    /**
     * 年龄（个月）
     */
    private Integer month;

    /**
     * 0，周岁（默认值）1，个月（已废弃）
     */
    private Integer ageType;

    /**
     * 地址
     */
    private String address;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 生日
     */
    private Date birthday;

    /**
     * 身高（cm）
     */
    private Integer height;

    /**
     * 体重（kg）
     */
    private Integer weight;

    /**
     * 用药史
     */
    private String medicationHistory;

    /**
     * 过敏史
     */
    private String allergyHistory;

    /**
     * 设备类型
     */
    private Integer deviceType;

    /**
     * 医生备注
     */
    private String doctorRemark;

    /**
     * 对于指定公众号，用户独有凭证
     */
    private String openId;

    @Ignore
    @ApiModelProperty(value = "预约码")
    private Long reservationCode;

    /**
     * 血常规年龄类型
     * 1：儿童；2：成人男；3：成人女
     *
     * @return
     */
    public Integer getPatientType() {
        if (age == null && month == null) {
            return 2;
        }
        if (age == null || age.compareTo(BigDecimal.valueOf(14)) <= 0) {
            return 1;
        } else if (sex.equals(2)) {
            return 3;
        }
        return 2;
    }

    /**
     * 金标仪 端的 3岁以下是儿童
     * 1 成年  0 儿童
     * @return
     */
    public Integer FindAgeType() {
        if (age == null && month == null) {
            return 1;
        }
        if (age != null && age.intValue() > ValueConst.VAL_3) {
            return 1;
        }
        return 0;
    }

}